﻿/**
 * @file PyFITKSEABeam.h
 * @brief  SEA梁 为python装饰器接口准备的封装类
 * @author wangning (2185896382@qq.com)
 * @date 2024-12-03
 */
#ifndef _PY_SEA_BEAM_H___
#define _PY_SEA_BEAM_H___

#include "PyFITKAcousticsAbsModel.h"
#include <QString>
#include "FITK_Component/FITKAcousticsModel/FITKAbstractSEASubSysWithNodes.h"

namespace Acoustics
{
    class FITKSEASubSysBeam;

    /**
     * @brief  SEA梁 为python装饰器接口准备的封装类
     * @author wangning (2185896382@qq.com)
     * @date 2024-12-03
     */
    class FITKAcousticsModelAPI PyFITKSEABeam : public PyFITKAcousticsAbsodel
    {
    public:
        explicit PyFITKSEABeam(const QString& name);
        explicit PyFITKSEABeam() = default;
        virtual ~PyFITKSEABeam();

        int getBeamID();
        /**
         * @brief  添加点
         * @author wangning (2185896382@qq.com)
         * @date   2024-11-24
         */
        bool addPoint(int pointId);
        /**
         * @brief 创建梁
         * @author wangning (2185896382@qq.com)
         * @date 2024-11-25
         */
        bool createBeam();
        /**
         * @brief  获取名称
         * @author wangning (2185896382@qq.com)
         * @date   2024-11-25
         */
        QString getName();
        /**
         * @brief  设置名称
         * @author wangning (2185896382@qq.com)
         * @date   2024-11-25
         */
        bool setName(const QString& name);
        /**
         * @brief  设置物理属性
         * @author wangning (2185896382@qq.com)
         * @date   2024-11-25
         */
        bool setPhysicalProp(const QString & pro);
        /**
         * @brief 设置阻尼
         * @param[i]  type： 设置种类 1:Flexure X ,2:Flexure X ,3:Extension Z ,4:Torsion ZZ
         * @param[i]  damping：阻尼
         * @author wangning (2185896382@qq.com)
         * @date 2024-11-25
         */
        bool setDamping(int type, const QString& damping);
        /**
         * @brief 设置是否启用 四种波 在SEA的解决方案
         * @author wangning (2185896382@qq.com)
         * @date 2024-11-25
         */
        bool setSEAMatrixSolution(int type, bool isSolution);
        /**
         * @brief 设置是否启用 四种波 的模态密度
         * @author wangning (2185896382@qq.com)
         * @date 2024-11-25
         */
        bool setModalDensity(int type, bool isModalDensity, const QString&  modalDensity);
        /**
         * @brief 获取周长和横截面周长和横截面面积
         * @author wangning (2185896382@qq.com)
         * @date 2024-11-25
         */
        QString getGeometryProp();

    private:
        /**
         * @brief  从管理器中获取新名称
         * @author wangning (2185896382@qq.com)
         * @date   2024-11-24
         */
        QString ckeckNameFromMgr(QString name);

    private:
        /**
         * @brief  梁的节点链表
         * @author wangning (2185896382@qq.com)
         * @date   2024-11-25
         */
        QList<Acoustics::FITKAbstractSEASubSysWithNodes::SubSysNode> _points;
        /**
         * @brief  梁对象
         * @author wangning (2185896382@qq.com)
         * @date   2024-11-25
         */
        Acoustics::FITKSEASubSysBeam* _beamObject{};
    };
}
#endif


